import requests, pymysql, pandas, configparser, os
class Conf:
    conf=configparser.ConfigParser() #类变量
    def read_entry(self):
        '''读入口配置信息'''
        Conf.conf.read('entry.ini', encoding='utf-8')
        self.__which_server=Conf.conf.get('entry', 'which_server') #self.__which_server私有成员变量，只能在类Conf中使用
        self.__which_db=Conf.conf.get('entry', 'which_db')
        # print(self.__which_server, self.__which_db)
    def read_server_conf(self):
        '''读接口服务器信息'''
        Conf.conf.read('server.conf', encoding='utf-8')
        ip=Conf.conf.get(self.__which_server, 'ip')
        port=Conf.conf.get(self.__which_server, 'port')
        self.host=f'http://{ip}:{port}'
        # print(self.host)
    def read_db_conf(self):
        '''读数据库服务器信息'''
        Conf.conf.read('db.conf', encoding='utf-8')
        host=Conf.conf.get(self.__which_db,'host')
        db=Conf.conf.get(self.__which_db, 'db')
        user=Conf.conf.get(self.__which_db, 'user')
        passwd=Conf.conf.get(self.__which_db, 'passwd')
        self.dbinfo={'host':host,'db':db,'user':user,'passwd':passwd}
        # print(self.dbinfo)
    def __init__(self): #构造方法
        self.read_entry()
        self.read_server_conf()
        self.read_db_conf()
def read_sqls(*sqlfiles):
    '''读指定的sql文件sqlfile，将所有有效sql语句存入列表并返回；如果不给参数，则读取当前文件夹中所有.sql文件中的sql语句'''
    if not sqlfiles: #没给参数
        sqlfiles=[i for i in os.listdir() if i.endswith('.sql')]
    # print(sqlfiles)
    #否则，sqlfiles中本来就存着很多文件名
    sqls=[]  # 存所有有效sql语句的列表
    for sfile in sqlfiles: #sfile表示一个文件
        file=open(sfile, 'r', encoding='utf-8')
        for sql in file:
            if sql.strip() and not sql.startswith('--'):
                sqls.append(sql.strip())
    return sqls
class DB:
    def __init__(self):
        '''连接数据库'''
        dbinfo=Conf().dbinfo
        self.__conn=pymysql.connect(**dbinfo)
        self.__cursor=self.__conn.cursor()
    def init_db(self, *sqlfiles): #*打包
        '''初始化数据库'''
        sqls=read_sqls(*sqlfiles) #*解包
        # print(sqls)
        for sql in sqls:
            self.__cursor.execute(sql)
        self.__conn.commit()
        self.__conn.close()
if __name__=='__main__': #调试代码
    #写法1：没写构造之前
    # a=Conf()
    # a.read_entry()
    # a.read_server_conf()
    # a.read_db_conf()
    #写法2：使用构造
    # a=Conf()
    # print(a.host, a.dbinfo)
    # print(read_sqls('login.sql'))
    # print(read_sqls())
    # print(read_sqls('signup.sql','login.sql'))
    a=DB()
    a.init_db() #sqlfiles=()，read_sqls(*())，read_sqls()；51行不加*，sqlfiles=()，read_sqls(())
    # a.init_db('login.sql')